/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package estrutura;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Curso disponibilizado pela Unicamp
 * 
 * @author Fábio, Gustavo
 */
@Entity
@Table(name = "CURSO")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Curso.findAll", query = "SELECT c FROM Curso c"),
    @NamedQuery(name = "Curso.findByNomeCurso", query = "SELECT c FROM Curso c WHERE c.nomeCurso = :nomeCurso"),
    @NamedQuery(name = "Curso.findByCodigoCurso", query = "SELECT c FROM Curso c WHERE c.codigoCurso = :codigoCurso"),
    @NamedQuery(name = "Curso.findByLimiteCreditos", query = "SELECT c FROM Curso c WHERE c.limiteCreditos = :limiteCreditos")})
public class Curso implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * Código do curso.
     */
    @Id
    @Basic(optional = false)
    @Column(name = "CODIGO_CURSO")
    private Integer codigoCurso;
    /**
     * Nome do curso.
     */
    @Column(name = "NOME_CURSO")
    private String nomeCurso;
    /**
     * Limite de créditos semestrais do curso.
     */
    @Column(name = "LIMITE_CREDITOS")
    private Integer limiteCreditos;

    /**
     * Construtor padrão.
     * Cria um objeto da classe Curso sem estabelecer código, nome e limite de
     * créditos semestrais para o curso.
     */
    public Curso() {
    }

    /**
     * Construtor com o código do curso.
     * Cria um objeto da classe Curso estabelecendo apenas o código do curso.
     * @param codigoCurso Código do curso.
     */
    public Curso(Integer codigoCurso) {
        this.codigoCurso = codigoCurso;
    }
    
    /**
     * Construtor com o código e o limite de créditos semestrais do curso.
     * Cria um objeto da classe Curso estabelencedo o código e o limite de créditos
     * semestrais do curso.
     * @param limiteCreditos Limite de créditos do curso.
     * @param codigoCurso Código do curso.
     */
    public Curso(Integer limiteCreditos, Integer codigoCurso) {
        this.limiteCreditos = limiteCreditos;
        this.codigoCurso = codigoCurso;
    }
    
    /**
     * Construtor com todos os atributos.
     * Cria um objeto da classe Curso estabelecendo todos os atributos do objeto.
     * @param limiteCreditos Limite de créditos do curso.
     * @param codigoCurso Código do curso.
     * @param nomeCurso Nome do curso.
     */
    public Curso(Integer limiteCreditos, Integer codigoCurso, String nomeCurso) {
        this.codigoCurso = codigoCurso;
        this.limiteCreditos = limiteCreditos;
        this.nomeCurso = nomeCurso;
    }

    /**
     * @return Retorna o código do curso.
     */
    public Integer getCodigoCurso() {
        return codigoCurso;
    }

    /**
     * @param codigoCurso Novo código do curso (inteiro positivo).
     */
    public void setCodigoCurso(Integer codigoCurso) {
        this.codigoCurso = codigoCurso;
    }

    /**
     * @return Retorna o limite de créditos semestrais do curso.
     */
    public Integer getLimiteCreditos() {
        return limiteCreditos;
    }

    /**
     * @param limiteCreditos Novo limite de créditos semestrais do curso.
     */
    public void setLimiteCreditos(Integer limiteCreditos) {
        this.limiteCreditos = limiteCreditos;
    }
    
    /**
     * @return Retorna o nome do curso.
     */
    public String getNomeCurso() {
        return nomeCurso;
    }
    
    /**
     * @param nomeCurso Novo nome do curso.
     */
    public void setNomeCurso(String nomeCurso) {
        this.nomeCurso = nomeCurso;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigoCurso != null ? codigoCurso.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Curso)) {
            return false;
        }
        Curso other = (Curso) object;
        return (this.codigoCurso != null || other.codigoCurso == null) && (this.codigoCurso == null || this.codigoCurso.equals(other.codigoCurso));
    }

    @Override
    public String toString() {
        return "estrutura.Curso[ codigoCurso=" + codigoCurso + " ]";
    }
    
}
